// 在公司年会上，我们经常会有抽奖的需求
// 需要你实现一个抽奖的功能，包含如下要求
// 1. 对待抽奖者的名单进行乱序排列（打乱次序）
// 2. 点击开始抽奖时，运行start，在名单内随机指定一个index作为开始index
// 3. 每100ms以此index开始轮询抽奖列表，当用户点击stop时停止轮询inex，并返回抽中的人
// 4. 每次抽奖可设置n（n>0）个人中奖。每次抽奖抽1个人，中奖的人不可再次被抽中
const userList = [
    '王雪', '李阳', '张晨', '陈婷', '刘宇',
    '赵博', '孙洁', '周航', '吴梅', '郑勇',
    '王梦', '杨华', '徐杰', '马丽', '何昊',
    '林俊', '朱红', '范冰', '余宏', '吕娜'
];
class Lottery {
    // 完成你的代码编写
    constructor(userList, time) {
        this.userList = userList
        this.time = time
        this.timer = null
        this.index = 0
    }
    start() {
        this.userList.sort(() => Math.random() - 0.5)
        this.index = Math.floor(Math.random())
        const self = this
        this.timer = setInterval(() => {
            if(this.index + 1 > this.userList.length) {
                return
            }
            this.index++
        }, 100)
    }
    stop() {
        clearInterval(this.timer)
        if(this.time == 0) {
            return null
        }
        this.time--
        return '中奖者是:' + this.userList[this.index];
    }
    }


// 模拟一次用户的执行，设置本次抽奖中奖2人
const lotteryIns = new Lottery(userList, 2);

const sleep = (t)=> new Promise(res=> setTimeout(res, t));
async function drew(len) {
  for(let i = 0; i < len; i++) {
      lotteryIns.start();
      await sleep(1000);
      console.log(lotteryIns.stop()); // 期望输出中奖者的名字
  }
}
// 执行抽奖3次
//输出2个中奖者的名字，和1个null
drew(3);